﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ItalcoTransfer;
using ItalcoTransfer.italco.vo;
using ItalcoTransfer.Resources;

namespace ItalcoApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            ItalcoTransfer.Map.Structure Hypstr = new ItalcoTransfer.Map.Structure();
            List<HyperFileVO> estructura = new List<HyperFileVO>();
            Console.WriteLine("-----------------------------------------------------------------------------------");
            Console.WriteLine("Proceso iniciado");
            //LogFile.LogINFO("-----------------------------------------------------------------------------------");
            //LogFile.LogINFO("Proceso iniciado");

            Hypstr.GetHyperfileStructure(ref estructura,
                System.Configuration.ConfigurationManager.AppSettings["FicheroConfigs"].ToString(),
                System.Configuration.ConfigurationManager.AppSettings["RutaMasters"].ToString());
            List<HyperFileVO> resultado = new List<HyperFileVO>();

            Hypstr.FillFiles(estructura, ref resultado);
            if (resultado.Count() == 0)
            {
                Console.WriteLine("No se encontraron ficheros de CSV disponibles para ser procesados");
                //LogFile.LogINFO("No se encontraron ficheros de SAP disponibles para ser procesados");
            }
            else
            {
                foreach (HyperFileVO file in resultado)
                {
                    string sTexto;
                    if (file.HasData)
                        file.GenerateXML();
                    if (file.Errores.Count() > 0)
                    {
                        sTexto = string.Format("Se han encontrado algunos ERRORES al procesar el fichero {0}\n", file.NombreFichero);
                        sTexto += string.Format("\tEl fichero contenia {0} filas\n", file.NumeroLineasArchivo);
                        sTexto += string.Format("\tSe procesaron correctamente {0} registros\n", file.NumeroLineasArchivo - file.NumeroProcesadosKO);
                        //if (file.NumeroLineasFueraPeriodo>0)
                        //    sTexto += string.Format("\t   de los cuales {0} pertenecían a un periodo atrasado\n", file.NumeroLineasFueraPeriodo);

                        sTexto += string.Format("\tNo se pudieron procesar {0} registros\n", file.NumeroProcesadosKO);
                        sTexto += "\tSe produjeron los siguientes errores al procesar el fichero: ";
                        foreach (ErrorInfo errInfo in file.Errores)
                        {
                            sTexto += "\t\t" + errInfo.ErrorDescription + "\n";
                        }
                        Console.WriteLine(sTexto);
                        //LogFile.LogINFO(sTexto);
                        //file.EnviarCorreoError();
                        file.MoveFileKO();
                    }
                    else
                    {
                        sTexto = string.Format("Se ha procesado CORRECTAMENTE todo el fichero {0}\n", file.NombreFichero);
                        sTexto += string.Format("\tEl fichero contenia {0} filas\n", file.NumeroLineasArchivo);
                        sTexto += string.Format("\tSe procesaron correctamente {0} registros\n", file.NumeroLineasArchivo - file.NumeroProcesadosKO);
                        //if (file.NumeroLineasFueraPeriodo > 0)
                        //    sTexto += string.Format("\t   de los cuales {0} pertenecían a un periodo atrasado\n", file.NumeroLineasFueraPeriodo);
                        //LogFile.LogINFO(sTexto);
                        Console.WriteLine(sTexto);
                        //file.EnviarCorreoOK();
                        file.MoveFileOK();
                    }
                }
            }
            //LogFile.LogINFO("Fin del proceso");
            //LogFile.LogINFO("-----------------------------------------------------------------------------------");
            Console.WriteLine("Fin del proceso");
            Console.ReadLine();
        }

    }
}
